home *** CD-ROM | disk | FTP | other *** search
- 0 print"[147]":poke53280,9:poke53281,7:poke646,9
- 1 print " song loader":print:print
- 3 print" this is an example of how to load and use a song stored on disk";
- 5 print" using the program song maker."
- 6 rem
- 7 print" line 10 and line 9000 must execute before anything else in your";
- 8 print " program."
- 10 gosub 9000:goto 80
- 60 for ph=0 to es%:for n=1 to len(md$(ph)):sys mm
- 62 f$=fr$(n,ph)
- 65 sys m
- 67 for i=0 to du%(val(mid$(md$(ph),n,1))):next
- 68 rem sys mm:rem staccato notes
- 69 next:next
- 70 sys mm:return
- 80 print "[144]when song ends, press":print:print "shift to repeat song"
- 85 print "or q to quit"
- 100 if peek(653)<>0 then gosub 60:goto 100
- 110 if peek(203)=62 then poke 198,0:sys 65126
- 190 goto 100
- 8997 rem
- 8998 rem set up sound and load song
- 8999 rem
- 9000 f$="f":i=0:n=0:vc=0:m=848:mm=823:rem m & mm put ml in cassette buffer
- 9001 ph=0:dim g%(2),ad(2),du%(9),ak%(2),dy%(2),sn%(2),re%(2),wf%(2),pw%(2,1)
- 9007 rem
- 9008 rem open song file & get # of phrases and # of voices
- 9009 rem
- 9010 open 2,8,2,"0:song #1,s,r"
- 9015 input#2,es%,ev%,ld%
- 9017 rem
- 9018 rem dimension key variables
- 9019 rem
- 9020 dim fr$(ld%,es%),md$(es%)
- 9027 rem
- 9028 rem load the remainder of the variables from the song file
- 9029 rem
- 9030 for i=0 to 2:input#2,g%(i):next
- 9031 for i=0 to 2:input#2,ak%(i),dy%(i),sn%(i),re%(i)
- 9032 for n=0 to 1:input#2,pw%(i,n):next:next
- 9033 for i=0 to 9:input#2,du%(i):next
- 9034 for ph=0 to es%:input#2,md$(ph):for n=1 to len(md$(ph))
- 9035 for i=1 to 6:get#2,a$,b$
- 9036 if a$="" then a$=chr$(0)
- 9037 fr$(n,ph)=fr$(n,ph)+a$:next:next:next
- 9040 close 2
- 9041 rem
- 9042 rem set up envelopes
- 9043 rem
- 9044 for i=0 to 2:ad(i)=54277+7*i:next
- 9045 for i=0 to 2:poke ad(i),ak%(i) or dy%(i)
- 9046 poke ad(i)+1,sn%(i) or re%(i):next
- 9047 rem
- 9048 rem set pulse widths
- 9049 rem
- 9050 for i=0 to 2:vc=54274+i*7:for n=0 to 1
- 9051 poke vc+n,pw%(i,n):next:next
- 9066 rem
- 9067 rem set filter and volume
- 9068 rem filter frequency
- 9069 rem low byte (0-7) x%; high byte (0-255) y%
- 9070 x%=3:y%=150
- 9071 poke 54293,x%:poke 54294,y%
- 9072 rem filter on?
- 9073 rem voice 1 on=1; 2 on=2; 3 on=4; 1&2 on=3; 2&3 on=6; all on=7
- 9074 x%=0
- 9075 rem filter resonance
- 9076 rem peak volume (0=low, 15=high)
- 9077 y%=14
- 9078 y%=y%*16:poke 54295,x% or y%
- 9079 rem select filter type
- 9080 rem low-pass=1;band-pass=2;high-pass=4;lo-band=3;hi-band=6;all=7
- 9081 x%=1
- 9082 x%=x%*16
- 9083 rem
- 9084 rem select overall volume
- 9085 rem 15=high, 0=low
- 9086 y%=15
- 9087 poke 54296,x% or y%
- 9197 rem
- 9198 rem machine language routine at m
- 9199 rem
- 9218 rem find address of f$ and put it in zero page at 139, 140
- 9219 rem
- 9220 n=peek(45)+256*peek(46)+3:y%=n/256:x%=n-y%*256
- 9221 poke m,173:poke m+1,x%:poke m+2,y%:n=n+1:y%=n/256:x%=n-y%*256
- 9222 poke m+3,133:poke m+4,251:poke m+5,173:poke m+6,x%:poke m+7,y%
- 9223 poke m+8,133:poke m+9,252:poke m+10,160:poke m+11,0
- 9224 poke m+12,162:poke m+13,0
- 9228 rem
- 9229 rem get each pitch from f$ and put it in frequency register
- 9230 for i=m+14 to m+54 step 8:poke i,177:poke i+1,251
- 9231 poke i+2,157:poke i+3,0:poke i+4,212
- 9232 poke i+5,200:poke i+6,162:read a:poke i+7,a:next
- 9233 data 1,7,8,14,15,4
- 9238 rem
- 9239 rem gate each sound open
- 9240 n=0:for i=m+59 to m+71 step 6
- 9241 poke i,173:a=mm-3+n:y%=a/256:x%=a-256*y%:poke i+1,x%:poke i+2,y%
- 9242 poke i+3,141:read a:poke i+4,a:poke i+5,212:n=n+1:next
- 9243 data 4,11,18
- 9247 rem
- 9248 rem garbage collection
- 9250 for i=m+77 to m+90:read a:poke i,a:next
- 9255 data 164,52,165,51,105,6,144,1,200,133,51,132,52,96
- 9257 rem
- 9258 rem gate-off ml routine at mm
- 9259 rem
- 9260 for i=mm to mm+16 step 8
- 9261 poke i,173:y%=3:x%=34+(i-mm)/8:poke i+1,x%:poke i+2,y%:rem uses 820-822
- 9262 poke i+3,41:poke i+4,254
- 9263 poke i+5,141:read a:poke i+6,a:poke i+7,212:next:poke mm+24,96
- 9264 data 4,11,18
- 9267 rem
- 9268 rem set waveforms with gates off
- 9269 rem stored at 820-822--line 9261 requires this (820=hex 03 34)
- 9270 poke 820,g%(0):poke 821,g%(1):poke 822,g%(2):sys mm
- 9280 ph=0
- 9290 return
-